export function formatDate(date, fmt = 'YYYY-MM-DD HH:mm:ss') {
  // 检查输入是否为有效日期
  if (!date) return ''; // 如果没有提供日期，则返回空字符串

  // 尝试将输入转换为 Date 对象
  date = new Date(date);

  // 检查转换后的 date 是否是有效的日期对象
  if (isNaN(date.getTime())) {
    console.warn('Invalid date:', date);
    return ''; // 或者你可以选择返回原始输入或其他默认值
  }

  const o = {
    'Y+': date.getFullYear(),        // 年
    'M+': date.getMonth() + 1,      // 月份
    'D+': date.getDate(),           // 日
    'H+': date.getHours(),          // 小时
    'm+': date.getMinutes(),        // 分钟
    's+': date.getSeconds(),        // 秒
    'q+': Math.floor((date.getMonth() + 3) / 3), // 季度
    'S': date.getMilliseconds()     // 毫秒
  };

  if (/(Y+)/.test(fmt)) {
    fmt = fmt.replace(RegExp.$1, (o['Y+'] + '').substr(4 - RegExp.$1.length));
  }

  for (let k in o) {
    if (new RegExp(`(${k})`).test(fmt)) {
      let str = o[k] + '';
      fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? str : padLeftZero(str));
    }
  }

  return fmt;
}

function padLeftZero(str) {
  return ('00' + str).slice(-2); // 使用 slice 而不是 substr，更简洁
}

export function str2Date(dateStr, separator = '-') {
  if (!dateStr) return null; // 如果没有提供日期字符串，则返回 null

  // 处理 ISO 8601 格式的日期字符串
  if (dateStr.includes('T')) {
    return new Date(dateStr);
  }

  // 分割日期字符串
  const parts = dateStr.split(separator);
  if (parts.length !== 3) {
    console.warn('Invalid date format:', dateStr);
    return null; // 如果分割后不包含三个部分，则返回 null
  }

  const [year, month, day] = parts.map(part => parseInt(part, 10));

  // 检查年份、月份和日是否为有效数字
  if (isNaN(year) || isNaN(month) || isNaN(day)) {
    console.warn('Invalid date parts:', parts);
    return null;
  }

  // 创建 Date 对象
  const date = new Date(year, month - 1, day);

  // 检查创建的 Date 对象是否有效
  if (isNaN(date.getTime())) {
    console.warn('Invalid date:', date);
    return null;
  }

  return date;
}